Fix c/s 19886: Must free pages after synchronously scrubbing them
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 3 Jul 2009 07:54:51 +0000 (08:54 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 3 Jul 2009 07:54:51 +0000 (08:54 +0100)
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen/common/page_alloc.c

index 9147e8a2b14375965b207291efd75c00fb0f1254..be28710a0f7c6da38d1b70c8c9b9898730a7089c 100644 (file)
@@ -1206,23 +1206,16 @@ void free_domheap_pages(struct page_info *pg, unsigned int order)
 
         spin_unlock_recursive(&d->page_alloc_lock);
 
-        if ( likely(!d->is_dying) )
-        {
-            free_heap_pages(pg, order);
-        }
-        else
-        {
-            /*
-             * Normally we expect a domain to clear pages before freeing them,
-             * if it cares about the secrecy of their contents. However, after
-             * a domain has died we assume responsibility for erasure.
-             */
+        /*
+         * Normally we expect a domain to clear pages before freeing them, if 
+         * it cares about the secrecy of their contents. However, after a 
+         * domain has died we assume responsibility for erasure.
+         */
+        if ( unlikely(d->is_dying) )
             for ( i = 0; i < (1 << order); i++ )
-            {
-                page_set_owner(&pg[i], NULL);
                 scrub_one_page(&pg[i]);
-            }
-        }
+
+        free_heap_pages(pg, order);
     }
     else
     {